/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
    Button, CCell, Table, TableBody, TableRow, Text, TextArea, useTheme, useToast,
} from "customize-easy-ui-component";
import {InspectRecordLayout, InternalItemProps, useItemInputControl} from "../../common/base";
import {setupItemAreaRoute} from "./orcIspConfig";
import {useMedia} from "use-media";
import {assertNamesUnique} from "../../common/eHelper";
import {EditStorageContext} from "../../StorageContext";
import {EachMeasureItemConfig} from "../../common/measure";
import {daL改造内容, daL重大修理内容, 操纵方式选, 施工许可证子项选,} from "../../tower/craneJj/orcBase";
import {multiCheckFor} from "../../common/general";
import {itemA结论} from "../../mobilecr/editorIN";
import {itemA技术见证} from "../../tower/editorJj";
import {config距离} from "../../mobilecr/Intial/orcBase";
import {itemA受力结构, item受力结构} from "../../tower/craneJj/editThicknes";
import {itemA应变应力} from "../../tower/craneJj/editStrainS";
import {config运行速度} from "./MoveSpeedLift";
import {作业环境选} from "../../gantry/portalJj/orcBase";

export const render层站数 = {
    view: (orc: any) => {
        return <div css={{display: 'flex', justifyContent: 'space-around', alignItems: 'center'}}>
            <Text>{orc.电梯层数} 层</Text><Text>{orc.电梯站数} 站</Text>
        </div>
    },
};
export const config设备概况 = [
    [['安装改造重大修理单位名称', '新安改单']],
    [['施工单位生产许可证(受理决定书)编号', '施许可号'], ['安装改造重大修理单位负责人', '安单负责']],
    [['施工单位生产许可证许可子项目', {n: '施许可子', t: 'l', l: 施工许可证子项选}], ['施工单位联系电话', '施单联电'],],
    [['使用单位名称', '_$使用单位']],
    [['使用单位地址', '_$使用单位地址']],
    [['分支机构', '_$分支机构']],
    [['分支机构地址', '_$分支机构地址']],
    [['产权单位名称', '_$产权单位']],
    [['产权单位地址', '_$产权单位地址'] ],
    [['使用单位联系人', '_$单位联系人'], ['使用单位安全管理人员', '安全员']],
    [['使用单位联系电话', '_$使用单位电话'], ['安全管理人员联系电话', '安全员电']],
    [['使用单位统一社会信用代码', '_$使用单位信用码'], ['管理部门类型','_$使管部类型']],
    [['制造单位名称', '_$制造单位'] ],
    [['制造单位生产许可证编号', '生产许号'], ['制造单位生产许可证许可子项目', {n: '制许可子', t: 'l', l: 施工许可证子项选}], ],
    [['型号规格', '_$型号'], ['产品编号', '_$出厂编号'] ],
    //操纵方式= 升降机的台账的 工作方式 ；    作业环境=台账有： 使用环境？ 【注意】升降机和起重的存储差别，台账前端页面字段名不同。
    [['操纵方式', '_$工作方式'], ['作业环境', '_$使用环境'], ],
    [['制造日期', '_$制造日期'], ['进口情况','_$进口类型'], ],
    [['投入使用日期', '_$投用日期'], ['单位内编号','_$单位内部编号'], ],
    //  ['设备型号', '设备型'], ？多余：
    [['设计使用年限','_$设计年限', '年'],  ['设备型号','设备型'], ],
    [['使用地点', '_$设备使用地点']],
    [['设备使用所在区域', '_$使用地区域']  ],
        //升降机:额定载重=rtlf=额定载荷;
    [['额定起重量','_$额定载荷','t'], ['层站数','_$电梯站数', render层站数] ],
    //额定速度   最大行程= 提升高度
    [['额定提升速度','_$额定速度','m/s'], ['最大行程','_$提升高度','m'] ],
    [['导轨架高度', '_$导轨架高度','m'], ['传动型式', '_$传动方式'] ],
    //@ 独立安装高度?==最大独立高度;    两个啊？ 用：检验时对重数量； 而不用：对重块数量；
    [['最大独立高度','_$独立高度','m'], ['对重数量','_$检对重数量','个'], ],
    [['检验时附墙架数量','_$检附墙架数','个'], ['检验时导轨架高度','_$导轨架高度','m'], ],
    [['防坠安全器型号','_$防坠安器型'], ['防坠安全器编号','_$防坠安器编'] ],
    [['限速器型号', '_$限速器型号'], ['限速器编号', '_$限速器编号'] ],
    [['安全钳型号', '_$安全钳型号'], ['安全钳编号', '_$安全钳编号'] ],
    [['其他主要参数',{n:'其他参数',t:'m'}],   ],
    [['检验依据',{r:'《起重机械安全技术规程》（TSG 51-2023）'}]],
    [['下次定期检验日期','_$新下检日'],['是否流动作业',{n:'流动作业',t:'b'}]],
    [['现场检验条件',{r:'见附录9'}],['是否型式试验样机',{n:'型试样机',t:'b'}] ],
        //存储是在multiCheckFor回调函数的{ names:[] };   3 + 3小项目
    [['重大修理内容','',multiCheckFor(daL重大修理内容)]],
    [['改造内容','',multiCheckFor(daL改造内容)]],
    [['备注',{n:'概备注',t:'m'}]],
];

/**测量表：太多了可拆成两个编辑器； 注意：t: [] 不同于 t: [undefined,undefined,undefined]；
 * */
export const config观测数据 = [
    [{n: '卷筒板', t: ['C3.8.2','卷筒上压板数量'], u: '个'}, ],
    [{n: '绳夹数', t: [undefined,'绳夹数量'],  save: false},],
    [{n: '绳夹间', t: [undefined,'绳夹间距'],  u: 'mm', c: '弃', d: '2', save: false},],
    [{n: '编结长', t: [undefined,'钢丝绳编结长度'],  c: '弃', d: '2', save: false},],
    [{n: '安圈数', t: [undefined,'安全圈数'],  u: '圈', save: false},],
    [{check: '3.8.2', }],
    [{n: '室护栏高', t: ['C3.10', '敞开式司机室护栏高度'], u: 'm'}, ],
    [{check: '3.10'}],
    [{n: '电阻N', t: ['C3.11.3', 'TN系统重复接地电阻'], u: 'Ω', c: '四', d: '2', save: true},
        {n: '电阻T', t: [undefined, 'TT系统接地电阻'], c: '弃', d: '2', save: false},
        {n: '电阻I', t: [undefined, 'IT系统接地电阻'], c: '四', },
    ],
    [{check: '3.11.3'}],
    [{n: '绝缘阻', t: ['C3.14','主回路、控制回路、电气设备的相间绝缘电阻和对地绝缘电阻'], u: 'MΩ',c: '四', d: '1',save: false}, ],
    [{check: '3.14',sync:'绝缘电阻'}],
    [{n: '验前温', t: ['C4.7.2.3','液压系统油液温升','试验前温度'], u:'℃',  omit:'4.7.2.3'},
        {n: '验后温', t: [undefined,undefined,'试验后温度'],   omit:true },
        {n: '温升值', t: [undefined,undefined,'温升值'], u:'℃',  omit:true },
        {n: '温升允', t: [undefined,undefined,'温升允许值'],   omit:true },
    ],
    [{check: '4.7.2.3'}],
    [{n: '水平偏差', t: ['C4.9.5.2', '测量吊笼底板在各个方向的水平度偏差改变值不应大于50mm/m'], u: 'mm/m', c: '四', d: '1'}, ],
    [{check: '4.9.5.2'}],
] as EachMeasureItemConfig[][];

export const config梯子 = [
    [{n: '台净高', t: ['（1）通道与平台','通道、斜梯和平台的净空高度'], u: 'm', c: '四'}],
    [{n: '台净宽', t: [undefined,'运动部分附近的通道和平台的净宽度'], c: '四'}],
    [{n: '高不净宽', t: [undefined,'如果设有扶手或者栏杆，在高度不超过0.6m的范围内，通道的净宽度'], c: '四'}],
    [{n: '固道净宽', t: [undefined,'固定部分之间的通道净宽度'], c: '四'}],
    [{n: '少使高', t: [undefined,'起重机械结构件内部很少使用的进出通道','最小净空高度'], c: '四'}],
    [{n: '少使道宽', t: [undefined,undefined,'通道净宽度'], c: '四'}],
    [{n: '维保净高', t: [undefined,'只用于维护保养的平台，其上面的净空高度'], c: '四'}],
    [{n: '缝隙最宽', t: [undefined,'通道基面上缝隙长度等于或者大于200mm时，其最大宽度'], u: 'mm', c: '四'}],
    [{n: '动线上距', t: [undefined,'通道区域与裸露动力线，上方距离'], u: 'm', c: '四'}],
    [{n: '动线左右', t: [undefined,'通道区域与裸露动力线，左右距离'], c: '四'}],
    [{n: '动线下距', t: [undefined,'通道区域与裸露动力线，下方距离'], c: '四'}],
    [{n: '斜梯角', t: ['（2）梯子与栏杆','斜梯','斜梯的倾斜角'], u: '°', c: '四'}],
    [{n: '斜栏间距', t: [undefined,undefined,'主要斜梯栏杆的间距'], u: 'm', c: '四'}],
    [{n: '他斜栏间', t: [undefined,undefined,'其他斜梯栏杆的间距'], c: '四'}],
    [{n: '斜靠栏高', t: [undefined,undefined,'斜梯的一侧靠墙壁时，栏杆高度'], c: '四'}],
    [{n: '梯级宽', t: [undefined,undefined,'梯级的净宽度'], c: '四'}],
    [{n: '梯级高', t: [undefined,undefined,'单个梯级的高度'], c: '四'}],
    [{n: '直撑杆间', t: [undefined,'直梯','直梯两侧撑杆的间距'], c: '四'}],
    [{n: '撑梯级宽', t: [undefined,undefined,'两侧撑杆之间梯级宽度'], c: '四'}],
    [{n: '直梯级间', t: [undefined,undefined,'梯级的间距'], c: '四'}],
    [{n: '直护圈径', t: [undefined,undefined,'从高处有跌落危险的直梯，护圈直径'], c: '四'}],
    [{n: '直杆高出', t: [undefined,undefined,'直梯的两边撑杆比最上一个梯级高出的高度'], c: '四'}],
    [{n: '栏垂高', t: [undefined,'栏杆的垂直高度'], u: 'm', c: '四'}],
    [{n: '脚板高', t: [undefined,'踢脚板高度'], c: '四'}],
    [{n: '栏中间距', t: [undefined,'中间横杆，其与踢脚板或者栏杆的距离'], c: '四'}],
    [{n: '栏不道高', t: [undefined,'对净高不超过1.3m的通道，栏杆的高度'], c: '四'}],
    [{n: '扶手断长', t: [undefined,'沿建筑物墙壁或者实体墙结构设有的通道，允许用扶手代替栏杆，扶手的中断长度'], c: '四'}],
    [{n: '围绳高', t: [undefined,'护绳(如钢丝绳、链条)，高度'], c: '四'}],
    [{check: 'C3.7.4'}],
] as EachMeasureItemConfig[][];
export const config几何尺寸 = [
    [{n: '尺笼净空', t: ['吊笼净空尺寸（长×宽×高）'], u: 'mm', },],
    [{n: '尺标节', t: ['标准节尺寸（长×宽×高）'],    },],
    [{check: 'C3.6'}],
] as EachMeasureItemConfig[][];

export const tailZj观测= <Text css={{"@media print": {fontSize: '0.75rem'}}}>
    注：1、未测量或无需测量的，仅填检验结果栏。<br/>
    2、其他需记录的测量值和结果值填在备注栏中。<br/>
    3、分别抽查主回路、控制回路、电气设备的相间绝缘电阻和对地绝缘电阻，记录其中的最小值。
</Text>;
export const tail安距= <Text css={{"@media print": {fontSize: '0.75rem'}}}>
    注：1、对于不合格的值才需测量和记录，未测量或无需测量的，仅填检验结果栏。<br/>
    2、以设计文件作为检验结果判定依据时，设计要求值填在备注栏内。
</Text>;
export const tail速度= <Text css={{"@media print": {fontSize: '0.75rem'}}}>
    注：1、根据GB/T 10054规定，在额定载重量时测量吊笼额定提升速度。提升距离为全行程，次数不应少于3次，计算其平均值。对于SS型施工升降机，
    其提升速度按实测层钢丝绳的平均速度折算为基准层的提升速度。提升速度误差不应大于8%。<br/>
    2、对于产品标准和设计文件同时对速度允许偏差都有规定的，以较严规定作为检验结果判定依据。<br/>
    3、以设计文件作为检验结果判定依据时，设计要求值填在备注栏内。<br/>
    4、未检查或无需检验的，仅填检验结果栏。
</Text>;
export const tail制动 = <div>
    <Text css={{"@media print": {fontSize: '0.75rem'}}}>
        注：1、对于产品标准和设计文件同时对制动距离都有规定的，以较严规定作为检验结果判定依据。<br/>
        2、以设计文件作为检验结果判定依据时，设计要求值填在备注栏内。<br/>
        3、未检查或无需检验的，仅填检验结果栏。<br/>
    </Text>
    <Text css={{display: 'block', textAlign: 'center', margin: 'auto', "@media print": {maxWidth: '80%'}}}>
        表1 制动距离和制动减速度
        <Table tight miniw={800}>
            <TableBody>
                <TableRow><CCell>升降机额定速度 v(m/s)</CCell><CCell>防坠安全器制动距离 L(m)</CCell><CCell>防坠安全器平均制动减速度 a(m/s²)</CCell>
                    <CCell>防坠安全器制动减速度峰值</CCell></TableRow>
                <TableRow><CCell>v≤0.65</CCell><CCell>0.10～1.40</CCell><CCell>--</CCell><CCell rowSpan={5}>减速度峰值大于2.5g的时间不大于0.04s</CCell></TableRow>
                <TableRow><CCell>0.65＜v≤1.00</CCell><CCell>0.20～1.60</CCell><CCell>--</CCell></TableRow>
                <TableRow><CCell>1.00＜v≤1.33</CCell><CCell>0.30～1.80</CCell><CCell>--</CCell></TableRow>
                <TableRow><CCell>1.33＜v≤2.40</CCell><CCell>0.40～2.00</CCell><CCell>--</CCell></TableRow>
                <TableRow><CCell>v＞2.40</CCell><CCell>--</CCell><CCell>0.2g≤α≤1.0g</CCell></TableRow>
            </TableBody>
        </Table>
    </Text>
</div>;
export const tail几何 = <Text css={{"@media print": {fontSize: '0.75rem'}}}>
    注：1、以设计图样要求作为检验结果判定依据。<br/>
    2、未测量或无需测量的，仅填检验结果栏。
</Text>;
export const tail梯子 = <Text css={{"@media print": {fontSize: '0.75rem'}}}>
    注：1、对于不合格的值才需测量和记录，未测量或无需测量的，仅填检验结果栏。<br/>
    2、以设计文件作为检验结果判定依据时，设计要求值填在备注栏内。
</Text>;

export const config制动距离 = [['防坠制', '防坠安全器'],];

export const EntranceSetup =
    React.forwardRef((
        {show, alone = true, verId, rep}: InternalItemProps, ref
    ) => {
        const theme = useTheme();
        const atPrint = useMedia('print');
        const toast = useToast();
        const doCheckNames = React.useCallback((verId: string) => {
            const impressionismAs = setupItemAreaRoute({rep, noDefault: true, theme});
            const result = assertNamesUnique([{value: rep?.tzFields}, {value: impressionismAs?.Item, type: 'impr'},
                {value: config设备概况, type: 'esnt'},
                {value: [...itemA结论, ...itemA技术见证,]}, {value: config观测数据, type: 'mesB'},
                {value: config距离({}), type: 'mesB'},  {value: config几何尺寸, type: 'mesB'},
                {value: [...item受力结构, ...itemA受力结构]}, {value: config梯子, type: 'mesB'},
                {value: config运行速度, type: 'moAR'},  {value: config制动距离, type: 'moAR'},
                {value:[...itemA应变应力, ] },
            {value:['unq','仪器表','检验条件','观测备注','几何备注','梯子备注', '速度备注','制距备注' ]} ]);
        toast({title: "完成！", subtitle: result ? "没发现冲突" : "测试开关没开", intent: "success"});
    }, [rep,toast,theme]);
    const {storage, setStorage} =React.useContext(EditStorageContext) as any;
    const getInpFilter = React.useCallback((par: any) => {
        const {_tblFixed, } =par||{};
        return {_tblFixed, };
    }, []);
    const {inp, setInp} = useItemInputControl({ref});
    if (atPrint) return null;
    else return (
        <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} alone={alone} label={'初始化本报告，默认值配置等'}>
            {process.env.REACT_APP_TEST==='true' && <><div>
                <Text variant="h5">构建开发模板时的工具：校验模板的存储name冲突；</Text>
                <Button intent='primary' onPress={() => doCheckNames(verId!)}>校验模板name唯一性</Button>
                <Text variant="h5">设置待测试表格的各列宽度：</Text>
                <TextArea value={storage?._tblFixed || ''} rows={2} onChange={e =>{
                    JSON.parse(e.currentTarget.value??'[]');
                    setStorage({ ...storage, _tblFixed: e.currentTarget.value || undefined}); }}/>
            </div>
            </>
            }
            <hr/>
        </InspectRecordLayout>
    );
});
